\begin{lstlisting}[frame=shadowbox, language=C, breaklines=true, basicstyle=\footnotesize]
#Param: fd, puntero al string donde debo guardar y cantidad de caracteres a leer
#retorna en V0 la cantidad de char leidos

#define STDERR           2

#define TAM_FRAME       32

#define SS_NUM_BYTES    40
#define SS_BUFFER       36
#define SS_FD      	32

#define POS_SRA_RA      28
#define POS_SRA_FP      24
#define POS_SRA_GP      16

#include <mips/regdef.h>
#include <sys/syscall.h>

.data
msj_error: .asciiz ``Error de Lectura\n''
.text
.align 2
.globl read
.ent read


read:
   .frame        $fp,TAM_FRAME,ra
   .set noreorder
   .cpload       t9
   .set reorder
   subu          sp,sp,TAM_FRAME
   .cprestore POS_SRA_GP
   sw            ra, POS_SRA_RA(sp)
   sw            $fp, POS_SRA_FP(sp)
   move          $fp, sp

#guardo los parametros recibidos
   sw            a0, SS_FD (sp)
   sw            a1, SS_BUFFER (sp)
   sw            a2, SS_NUM_BYTES(sp)


   li            v0,SYS_read
   syscall
   bnez          a3,read_error #verifico si hay error 

eof:
   move          sp, $fp
   lw            ra, POS_SRA_RA(sp)
   lw            $fp, POS_SRA_FP(sp)
   addu          sp, sp, TAM_FRAME
   j             ra

read_error:
   li            v0, SYS_write
   la            a0, STDERR
   la            a1, msj_error
   li            a2, 17
   syscall #escribo en stderr

   li            v0, SYS_exit #salgo del programa
   li            a0, 1
   syscall

.end read
\end{lstlisting}
